.TH std::fread 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::fread \- std::fread

.SH Synopsis
   Defined in header <cstdio>
   std::size_t fread( void* buffer, std::size_t size, std::size_t count, std::FILE*
   stream );

   Reads up to count objects into the array buffer from the given input stream stream
   as if by calling std::fgetc size times for each object, and storing the results, in
   the order obtained, into the successive positions of buffer, which is reinterpreted
   as an array of unsigned char. The file position indicator for the stream is advanced
   by the number of characters read.

   If the objects are not TriviallyCopyable, the behavior is undefined.

   If an error occurs, the resulting value of the file position indicator for the
   stream is indeterminate. If a partial element is read, its value is indeterminate.

.SH Parameters

   buffer - pointer to the first object in the array to be read
   size   - size of each object in bytes
   count  - the number of the objects to be read
   stream - input file stream to read from

.SH Return value

   Number of objects read successfully, which may be less than count if an error or
   end-of-file condition occurs.

   If size or count is zero, fread returns zero and performs no other action.

   fread does not distinguish between end-of-file and error, and callers must use
   std::feof and std::ferror to determine which occurred.

.SH Example


// Run this code

 #include <cstddef>
 #include <cstdio>
 #include <fstream>
 #include <iomanip>
 #include <iostream>
 #include <vector>

 int main()
 {
     // Prepare file
     std::ofstream("test.txt") << 1 << ' ' << 2 << '\\n';
     std::FILE* f = std::fopen("test.txt", "r");

     std::vector<char> buf(4); // char is trivially copyable
     const std::size_t n = std::fread(&buf[0], sizeof buf[0], buf.size(), f);

     std::cout << "Read " << n << " object" << (n > 1 ? "s" : "") << ": "
               << std::hex << std::uppercase << std::setfill('0');
     for (char n : buf)
         std::cout << "0x" << std::setw(2) << static_cast<short>(n) << ' ';
     std::cout << '\\n';

     std::vector<std::string> buf2; // string is not trivially copyable
 //  This would result in undefined behavior:
 //  std::fread(&buf2[0], sizeof buf2[0], buf2.size(), f);
 }

.SH Possible output:

 Read 4 objects: 0x31 0x20 0x32 0x0A

.SH See also

   scanf  reads formatted input from stdin, a file stream or a buffer
   fscanf \fI(function)\fP
   sscanf
   fgets  gets a character string from a file stream
          \fI(function)\fP
   fwrite writes to a file
          \fI(function)\fP
   C documentation for
   fread
